package models

import (
	"activity_srv/basic/config"
	"time"
)

// DistributionRest 设置分销规则
type DistributionRest struct {
	Pattern                     string `json:"pattern"`                     //模式  1 指定分销 2 人人分销 3 满额分销
	Me                          string `json:"me"`                          //自购不反
	PullPeopleReturnPrice       string `json:"pullPeopleReturnPrice"`       //拉取人返回多少钱
	Member                      string `json:"member"`                      //是否给用户发分销佣金  0不发 1不限制
	OneRebate                   string `json:"oneRebate"`                   //一级返佣百分比
	TwoRebate                   string `json:"twoRebate"`                   //二级返佣百分比
	TPriceTime                  string `json:"TPriceTime"`                  //冻结时间
	EndPrice                    string `json:"endPrice"`                    //提现最低金额
	WithdrawType                string `json:"withdrawType"`                //提现方式
	WithdrawTypeProceduresPrice string `json:"withdrawTypeProceduresPrice"` //提现手续费
}

// DistributionData 二级分销设置表
type DistributionData struct {
	Id               uint32    `gorm:"column:id;type:int UNSIGNED;comment:主键;primaryKey;not null;" json:"id"`                                                  // 主键
	DistributionType uint64    `gorm:"column:distribution_type;type:bigint UNSIGNED;comment:分销类型  1 一级分销 2 二级分销;not null;default:2;" json:"distribution_type"` // 分销类型  1 一级分销 2 二级分销
	Status           uint64    `gorm:"column:status;type:bigint UNSIGNED;comment:分销状态 1启用 2停止;not null;default:1;" json:"status"`                              // 分销状态 1启用 2停止
	Poster           string    `gorm:"column:poster;type:varchar(255);comment:海报;not null;" json:"poster"`                                                     // 海报
	DistributionRest string    `gorm:"column:distribution_rest;type:varchar(255);comment:规则;not null;" json:"distribution_rest"`                               // 规则
	CreatedAt        time.Time `gorm:"column:created_at;type:datetime;comment:创建时间;not null;default:CURRENT_TIMESTAMP;" json:"created_at"`                     // 创建时间
}

// TableName 返回表名称
func (d *DistributionData) TableName() string {
	return "distribution_data"
}

// AddDistribution 添加设置
func (d *DistributionData) AddDistribution() error {
	return config.DB.Create(&d).Error
}

// GetDistributionId 获取二级分销设置主键Id
func (d *DistributionData) GetDistributionId() error {
	return config.DB.First(&d).Error
}

// GetPoster 查询二级分销海报
func (d *DistributionData) GetPoster() error {
	return config.DB.Find(&d).Error
}

// AddPoster 海报添加
func (d *DistributionData) AddPoster() error {
	return config.DB.Updates(&d).Error
}

// DistributionSearch 二级分销搜索表
type DistributionSearch struct {
	Id          uint32    `gorm:"column:id;type:int UNSIGNED;comment:主键;primaryKey;not null;" json:"id"`                              // 主键
	UserId      uint64    `gorm:"column:user_id;type:bigint UNSIGNED;comment:用户Id;not null;" json:"user_id"`                          // 用户Id
	Nickname    string    `gorm:"column:nickname;type:varchar(255);comment:昵称;not null;" json:"nickname"`                             // 昵称
	FId         uint64    `gorm:"column:f_id;type:bigint UNSIGNED;comment:副级用户Id;not null;" json:"f_id"`                              // 副级用户Id
	Mobile      string    `gorm:"column:mobile;type:varchar(11);comment:手机号;not null;" json:"mobile"`                                 // 手机号
	Price       uint64    `gorm:"column:price;type:bigint UNSIGNED;comment:价格;not null;" json:"price"`                                // 价格
	FreezePrice uint64    `gorm:"column:freeze_price;type:bigint UNSIGNED;comment:冻结金额;not null;" json:"freeze_price"`                // 冻结金额
	PullProple  int64     `gorm:"column:pull_prople;type:bigint;comment:拉取人数;not null;" json:"pull_prople"`                           // 拉取人数
	SumPrice    uint64    `gorm:"column:sum_price;type:bigint UNSIGNED;comment:总价格;not null;" json:"sum_price"`                       // 总价格
	CreatedAt   time.Time `gorm:"column:created_at;type:datetime;comment:创建时间;not null;default:CURRENT_TIMESTAMP;" json:"created_at"` // 创建时间
	UpdatedAt   time.Time `gorm:"column:updated_at;type:datetime;comment:修改时间;not null;default:CURRENT_TIMESTAMP;" json:"updated_at"` // 修改时间
	DeletedAt   time.Time `gorm:"column:deleted_at;type:datetime;comment:删除时间;default:NULL;" json:"deleted_at"`                       // 删除时间
}

// TableName 返回表名称
func (d *DistributionSearch) TableName() string {
	return "distribution_search"
}

// 二级分销查询当前用户上级
func (d *DistributionSearch) GetDistributionUpOneUser() error {
	return config.DB.Where("user_id = ?", d.UserId).Find(&d).Error
}

// 二级分销查询当前用户上上级
func (d *DistributionSearch) GetDistributionUpTwoUser() error {
	return config.DB.Where("user_id = ?", d.FId).Find(&d).Error
}

// 获取用户Id
func (d *DistributionSearch) GetDistributionUserId() error {
	return config.DB.Where("user_id = ?", d.UserId).Find(&d).Error
}

// 排行榜
func (d *DistributionSearch) DistributionSort(listType string, limit int64) (list []DistributionSearch, err error) {
	db := config.DB
	if listType == "price" {
		db = db.Order("price desc").Limit(int(limit))
	}
	if listType == "pull" {
		db = db.Order("pull_prople desc").Limit(int(limit))
	}
	db = db.Find(&list)
	return
}

// DistributionSearchList 二级分销搜索下两级列表
func (d *DistributionSearch) DistributionSearchList(userId int64) (list []DistributionSearch, err error) {
	config.DB.Where("f_id = ?", userId).Find(&list)
	return
}

type DistributionQrCode struct {
	Id           uint32    `gorm:"column:id;type:int UNSIGNED;primaryKey;not null;" json:"id"`
	UserId       uint32    `gorm:"column:user_id;type:int UNSIGNED;not null;" json:"user_id"`
	PosterQrCode string    `gorm:"column:poster_qr_code;type:varchar(255);not null;" json:"poster_qr_code"`
	PosterUrl    string    `gorm:"column:poster_url;type:varchar(255);not null;" json:"poster_url"`
	CreatedAt    time.Time `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt    time.Time `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt    time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

// TableName 返回表名称
func (d *DistributionQrCode) TableName() string {
	return "distribution_qr_code"
}
func (d *DistributionQrCode) DetailUserDistributionQrCode() error {
	return config.DB.Where("user_id = ?", d.UserId).Limit(1).Find(&d).Error
}
func (d *DistributionQrCode) AddDistributionQrCode() error {
	return config.DB.Create(&d).Error
}
